package cn.iocoder.yudao.framework.common.pojo;

import lombok.Data;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Data
public class LayuiTreeNode {

    /** 节点标题 */
    private String title;
    /** 节点唯一索引值，用于对指定节点进行各类操作 */
    private String id;
    /** 节点字段名 */
    private String field;
    /** 子节点。支持设定选项同父节点 */
    private List<LayuiTreeNode> children = new ArrayList<>();
    /** 点击节点弹出新窗口对应的 url。需开启 isJump 参数 */
    private String href;
    /** 节点是否初始展开，默认 false */
    private Boolean spread = false;
    /** 节点是否初始为选中状态（如果开启复选框的话），默认 false */
    private Boolean checked = false;
    /** 节点是否为禁用状态。默认 false */
    private Boolean disabled = false;

    private Boolean defaultChecked = false;

    private String parentId;
    private Integer seq;

    // 构建树形结构，支持多个根节点
    public static List<LayuiTreeNode> buildTree(List<LayuiTreeNode> nodeList) {
        Map<String, LayuiTreeNode> nodeMap = new HashMap<>();
        List<LayuiTreeNode> rootNodes = new ArrayList<>();
        // 将所有节点按 id 放入 Map 中，便于后续查找
        for (LayuiTreeNode node : nodeList) {
            node.setChildren(new ArrayList<>());  // 初始化 children 列表
            nodeMap.put(node.getId(), node);
        }
        // 遍历所有节点，构建树结构
        for (LayuiTreeNode node : nodeList) {
            // 如果找不到父节点，将当前节点视为根节点
            if (!nodeMap.containsKey(node.getParentId())) {
                rootNodes.add(node);  // 将根节点加入 rootNodes
            } else {
                // 否则，将子节点加入到父节点的 children 中
                LayuiTreeNode parent = nodeMap.get(node.getParentId());
                if (parent != null) {
                    parent.getChildren().add(node);
                } else {
                    // 如果没有找到父节点，也将该节点作为根节点处理
                    rootNodes.add(node);
                }
            }
        }
        return rootNodes;  // 返回包含多个根节点的树
    }


}
